﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Generic.Contract;

namespace Contract.Business.Entity
{
    //Criado por : Gustavo
    //Data       : 11/26/2011 12:44:45 AM
    public class BEVendaItem : BEGeneric
    {
        #region Atributos

        private BEProduto _Produto;
        private int _CodigoProduto;
        private BEProduto _ProdutoMetade;
        private int _CodigoProdutoMetade;
        private BEVenda _Venda;
        private int _CodigoVenda;
        private BETamanho _Tamanho;
        private int _CodigoTamanho;
        private decimal _ValorUnitario;
        private int _Quantidade;
        private decimal _Desconto;
        private decimal _ValorTotal;
        private bool? _Borda;
        private short? _TipoBorda;
        private string _Observacao;
        private bool _Cupom;

        #endregion

        #region Propriedades
        public BEProduto Produto
        {
            get
            {
                return this._Produto;
            }
            set
            {
                BEProduto previousValue = this._Produto;
                if ((previousValue == null) || (!previousValue.Equals(value)))
                {
                    this.SendPropertyChanging();
                    this._Produto = value;
                    if (value != null)
                    {
                        this._CodigoProduto = value.Codigo;
                    }
                    else
                    {
                        this._CodigoProduto = default(int);
                    }
                    this.SendPropertyChanged("Produto");
                }
            }
        }

        public int CodigoProduto
        {
            get
            {
                return this._CodigoProduto;
            }
            set
            {
                if (this._CodigoProduto != value)
                {
                    this.SendPropertyChanging();
                    this._CodigoProduto = value;
                    this.SendPropertyChanged("CodigoProduto");
                }
            }
        }

        public BEProduto ProdutoMetade
        {
            get
            {
                return this._ProdutoMetade;
            }
            set
            {
                BEProduto previousValue = this._ProdutoMetade;
                if ((previousValue == null) || (!previousValue.Equals(value)))
                {
                    this.SendPropertyChanging();
                    this._ProdutoMetade = value;
                    if (value != null)
                    {
                        this._CodigoProdutoMetade = value.Codigo;
                    }
                    else
                    {
                        this._CodigoProdutoMetade = default(int);
                    }
                    this.SendPropertyChanged("ProdutoMetade");
                }
            }
        }

        public int CodigoProdutoMetade
        {
            get
            {
                return this._CodigoProdutoMetade;
            }
            set
            {
                if (this._CodigoProdutoMetade != value)
                {
                    this.SendPropertyChanging();
                    this._CodigoProdutoMetade = value;
                    this.SendPropertyChanged("CodigoProdutoMetade");
                }
            }
        }

        public BEVenda Venda
        {
            get
            {
                return this._Venda;
            }
            set
            {
                BEVenda previousValue = this._Venda;
                if ((previousValue == null) || (!previousValue.Equals(value)))
                {
                    this.SendPropertyChanging();
                    this._Venda = value;
                    if (value != null)
                    {
                        this._CodigoVenda = value.Codigo;
                    }
                    else
                    {
                        this._CodigoVenda = default(int);
                    }
                    this.SendPropertyChanged("Venda");
                }
            }
        }

        public int CodigoVenda
        {
            get
            {
                return this._CodigoVenda;
            }
            set
            {
                if (this._CodigoVenda != value)
                {
                    this.SendPropertyChanging();
                    this._CodigoVenda = value;
                    this.SendPropertyChanged("CodigoVenda");
                }
            }
        }

        public decimal ValorUnitario
        {
            get
            {
                return this._ValorUnitario;
            }
            set
            {
                if (this._ValorUnitario != value)
                {
                    this.SendPropertyChanging();
                    this._ValorUnitario = value;
                    this.SendPropertyChanged("ValorUnitario");
                }
            }
        }

        public int Quantidade
        {
            get
            {
                return this._Quantidade;
            }
            set
            {
                if (this._Quantidade != value)
                {
                    this.SendPropertyChanging();
                    this._Quantidade = value;
                    this.SendPropertyChanged("Quantidade");
                }
            }
        }

        public decimal Desconto
        {
            get
            {
                return this._Desconto;
            }
            set
            {
                if (this._Desconto != value)
                {
                    this.SendPropertyChanging();
                    this._Desconto = value;
                    this.SendPropertyChanged("Desconto");
                }
            }
        }

        public decimal ValorTotal
        {
            get
            {
                return this._ValorTotal;
            }
            set
            {
                if (this._ValorTotal != value)
                {
                    this.SendPropertyChanging();
                    this._ValorTotal = value;
                    this.SendPropertyChanged("ValorTotal");
                }
            }
        }

        public string NomeProduto
        {
            get
            {
                if (this._Produto != null)
                    return this._Produto.Descricao;
                else
                    return "Indisponível";
            }
        }

        public string NomeProdutoMetade
        {
            get
            {
                if (this._ProdutoMetade != null)
                    return this._ProdutoMetade.Descricao;
                else
                    return "Indisponível";
            }
        }

        public string SiglaTamanho
        {
            get
            {
                if (this._Tamanho != null)
                    return this._Tamanho.Sigla;
                else
                    return "Indisponível";
            }
        }

        public BETamanho Tamanho
        {
            get
            {
                return this._Tamanho;
            }
            set
            {
                BETamanho previousValue = this._Tamanho;
                if ((previousValue == null) || (!previousValue.Equals(value)))
                {
                    this.SendPropertyChanging();
                    this._Tamanho = value;
                    if (value != null)
                    {
                        this._CodigoTamanho = value.Codigo;
                    }
                    else
                    {
                        this._CodigoTamanho = default(int);
                    }
                    this.SendPropertyChanged("Tamanho");
                }
            }
        }

        public int CodigoTamanho
        {
            get
            {
                return this._CodigoTamanho;
            }
            set
            {
                if (this._CodigoTamanho != value)
                {
                    this.SendPropertyChanging();
                    this._CodigoTamanho = value;
                    this.SendPropertyChanged("CodigoTamanho");
                }
            }
        }

        public bool? Borda
        {
            get
            {
                return this._Borda;
            }
            set
            {
                if (this._Borda != value)
                {
                    this.SendPropertyChanging();
                    this._Borda = value;
                    this.SendPropertyChanged("Borda");
                }
            }
        }

        public short? TipoBorda
        {
            get
            {
                return this._TipoBorda;
            }
            set
            {
                if (this._TipoBorda != value)
                {
                    this.SendPropertyChanging();
                    this._TipoBorda = value;
                    this.SendPropertyChanged("TipoBorda");
                }
            }
        }

        public string Observacao
        {
            get
            {
                return this._Observacao;
            }
            set
            {
                if (this._Observacao != value)
                {
                    this.SendPropertyChanging();
                    this._Observacao = value;
                    this.SendPropertyChanged("Observacao");
                }
            }
        }

        public bool Cupom
        {
            get
            {
                return this._Cupom;
            }
            set
            {
                if (this._Cupom != value)
                {
                    this.SendPropertyChanging();
                    this._Cupom = value;
                    this.SendPropertyChanged("Cupom");
                }
            }
        }
        #endregion

        #region Métodos Override
        public override string ToString()
        {
            return this._CodigoVenda.ToString();
        }

        public override bool Equals(object obj)
        {
            try
            {
                return this.CodigoVenda == ((BEVendaItem)obj).CodigoVenda &&
                       this.CodigoProduto == ((BEVendaItem)obj)._CodigoProduto &&
                       this.CodigoProdutoMetade == ((BEVendaItem)obj)._CodigoProdutoMetade;
            }
            catch (Exception)
            {
                return false;
            }
        }
        #endregion
    }
}
